框架

DUCKERRY_Warehouse 日常自动化技能 v1.9.2

[Cheap] Step 0 · 源可用性预检(≤30s)

框架 · 资产·规范 · 框架/技能/duckerry-daily-review SKILL.md · 13116 B

DUCKERRY_Warehouse 日常自动化技能 v1.9.2

仓库 /var/minis/mounts/DUCKERRY_Warehouse(挂载,可写)。默认路径不存在时先看 /var/minis/mounts/,取唯一明显匹配者;否则报告缺失,不猜路径、不新建仓库。

口径细节、复盘十段模板与 §6.3 A1 骨架、看板实现、历史 v1.x、外部资源红线、成本刺客清单 → 见 reference.md,按需读取。

硬规则:任何手写提示词若未含 state_digest.py --guard 与当前自检口径(arch_check 11/11、doc_sync_check --strict rc=0),一律视为过期,以本 SKILL.md 为准。

§0 硬性前置(五条,先读)

  • §0.1 触发词与模式:更新数据并生成今日复盘/生成每日复盘→DAILY_REVIEW;执行开盘日任务/做盘前简报→OPEN_DAY;检查仓库状态→STATUS;重试今日任务→RETRY。
  • §0.2 硬性熔断:每步开场 python3 scripts/state_digest.py --guard;rc=3 立即终止(写 state + 回报 BUDGET BREAK,不得重试/换参再跑)。计数与成本按 <日期>|<MODE> 分桶(跨日/换 mode 从 0 起算)。--cost 必须如实传,否则预算防线不生效。假熔断才可 --reset --mode M。
  • §0.3 状态外置:state/current.md 只允许 state_digest.py 写入(--step N --mode M --cost X),Agent 手工编辑视为违规;每 ≤3 步覆盖写一次,之后只读该文件;需要历史只读 state/current.md + 目标文件本身。
  • §0.4 模型路由:[Cheap]=跑脚本/搬运/格式/摘要;[Std]=结构化复盘正文 + review_write 落盘;[Exp]=市场逻辑推演/跨源仲裁(单次任务最多 2 段)。未标注默认 [Cheap]。
  • §0.5 成本纪律:禁止重复读同一口径文件、原样贴大 JSON、反复自我复述;每步必须产出一句话证据(文件路径 + 关键数字),无证据即无进展。(完整成本刺客清单见 reference.md §8。)

九步 SOP(线性 · 每步带时间预算 · 超时即止不重试)

任一步超时:写 state 证据 + 在汇报里明确 TIMEOUT: <步骤>,不得"再试一次"。分级标注见 §0.4。

[Cheap] Step 0 · 源可用性预检(≤30s)

cd /var/minis/mounts/DUCKERRY_Warehouse && python3 scripts/preflight.py

读单行 JSON:core_ok / failed / suggest_skip_pipeline。core_ok=false → 跳过 Step 2 的完整管线,直接走「数据缺失占位」(§G1 失败处理)。逃生:--force-pipeline 人工强跑。只探测不写数据。

[Cheap] Step 1 · 数据收集(≤90s)

sh scripts/collect_unresolved_fred.sh ; tail -30 /var/minis/offloads/daily_collect.log   # FRED 16 系列
sh scripts/fetch_aux_sources.sh ; python3 scripts/update_aux_sources.py                  # 二级源(东财/CBOE)

失败不阻断。判定口径(回退守卫/未复权债券/盘中伪收盘)见 reference.md §1。

[Std] Step 2 · 运行真实数据管线(≤8min)or 被预检跳过

DK_DISABLE_MCAL=1 nohup python3 -u scripts/fetch.py > 数据/logs/interactive_daily_run.log 2>&1 & echo "PID=$!"
# 稳定性推荐:sh scripts/fetch_pipeline_safe.sh(两段式,日志 数据/logs/pipeline_safe_*.log)

必须后台跑 + 用 delay 每 60–90s 轮询(kill -0 <PID> + sh scripts/publish_status.sh <日志>),禁 sleep。完成判据 = 末行 === 完成: target=…, G1=PASS, publish=PASS …;缺行 = 被 iSH 静默 kill → 加 DK_DISABLE_MCAL=1 重跑(这是唯一允许的"重跑",且需在预算内)。被 Step 0 判定跳过时不跑管线,直接去 Step 6 写「数据缺失占位」,另行回报。

[Cheap] Step 3 · 批量自检(≤30s)

python3 scripts/selfcheck.py        # moc_index + arch_check + doc_sync 单进程三合一

all_ok=true 才继续;否则先 state_digest.py --step N 写证据再停止。三项判据:moc_index 登记、arch_check 11/11、doc_sync_check --strict rc=0(13 项)。

[Cheap] Step 4 · A1 组合记录 + 模拟盘看板(≤30s,独立于复盘交付)

python3 -c "import json;print(json.load(open('数据/latest.json')).get('portfolio'))" ; python3 scripts/portfolio.py --emit-review
python3 scripts/paper_dashboard.py    # 重生成 模拟盘看板.md
  • A1 三态:ok 照贴;skipped 写「本日未记录(已跳过)」;error 写「未记录:原因」。失败/跳过一律不得阻断复盘,但不得假装成功。红线:不写 数据/paper/、不产 order/signal。
  • 模拟盘看板:paper_dashboard.py 只读 数据/paper/(equity/orders/signals/positions)→ 仓库根双产物 模拟盘看板.md(纯 Markdown、去 emoji、排版优先)+ 模拟盘看板.html(github-markdown-css 排版 + Motion 动画,跟随系统深浅色)。只读、非阻断;fetch.py 发布成功后自动调用(幂等、可重复)。--no-html 只写 md、--print 只打印;任一 vendor 资产缺失都必须仍能正常渲染(CSS 退化 / 无动画),不得抛错。资产清单与实现坑 → reference.md §4。
  • 复盘 §6.1 只写「模拟盘见 模拟盘看板」+ 一句话状态(净值/持仓),不必在复盘正文里重抄整张看板。
  • 离线站点自更新(v1.9.4 起):paper_dashboard.py 收尾会后台异步调 scripts/build_offline_site.py --background,随内容/代码变化重建三个版式并写入全部路径:
版式产物路径
① Markdown 源(Obsidian 读)库根 复盘/、模拟盘看板.md、分区/ 等(管线自身写)
② Style A 深色展示版呈现/站点/(216 页)+ 呈现/整站-深色版.html
③ Style B 苹果风呈现/站点B/(216 页)+ 呈现/整站-苹果风.html

另含 模拟盘看板.html(paper_dashboard.py)。

  • 触发口径:指纹 = 全库 .md/.json/.csv/.jsonl + 生成器源码(工作区 *.py)。⇒ 数据更新、复盘新增、改了生成器样式/卡片都会自动重建;源文与代码都没变才跳过(约 1 秒)。--force 强建、--check 只看。
  • 构建后闸门(非阻断但必须记账):页数 / 两树死链 / 单文件结构(静态 section 数 · :target 路由 · no-js 兜底)→ 写 state/site_gate.json;失败只记账、不影响复盘发布。
  • 卡片设计规则(硬):每张卡片/瓦片都必须由真实数据现算(panel.csv / latest.json / paper_equity.csv / census / 数据目录计数 / build 树),并带数值说明(figcap/tile__cap);禁止装饰性占位图;没有数据就不画图(宁可无图,不可假图)。价格/净值类曲线必须取最近实测序列(如近 10 日黄金 PM、模拟盘净值曲线),随数据自动更新。
  • 手动重建与核验:python3 scripts/build_offline_site.py [--force|--check];单文件在 iOS「文件」/Safari 里站内可点(无 JS 时靠静态预渲染 + 纯 CSS :target 切页)。
  • 表现层打磨层(v1.9.5 起):/var/minis/shared/handoff_typography_ia/polish.py → 一个 polish() 字符串,注入四处:m4_nav_parts.PARTS_CSS(A 导航)· m4_review.CSS(A 文章/机器/叙事)· m6_apple.DARK_CSS + LIGHT_CSS(B 全部,B 文章/场景复用 LIGHT_CSS 自动继承)。A/B 两树共用一份,禁止各写一套。
  • 具体取法(全部有 Apple 官网产物出处,www.apple.com/v/macbook-pro/ax/built/styles/overview.built.css 实测):

· 焦点环 :focus-visible{outline:2px solid var(--sk-focus-color,#0071e3);outline-offset:3px} → 我们换成 --gold-1(A)/--blue(B); · 缓动与时长 cubic-bezier(.66,0,.1,1) + .344s/.414s → 统一成 --ease-apple/--dur-quick/--dur-calm,禁止各处随手写 cubic-bezier; · 横滑轨道 scroll-snap-type:x mandatory + scroll-padding-inline + scrollbar-width:none + overscroll-behavior-x:contain; · 两端真渐隐 mask-image:linear-gradient(...)(对应 Apple 的 tabnav-mask),不是画伪渐变; · 点击不出现灰块 -webkit-tap-highlight-color:transparent; · 触感反馈:按下 scale(.985)、@media(hover:hover) 悬停微抬 2px; · 命中区 ≥44px:用 ::after{inset:-8px} 扩热区,不改视觉尺寸; · 数字等宽 font-variant-numeric:tabular-nums;标题 text-wrap:balance;env(safe-area-inset-bottom); · 阅读进度条(body::after + animation-timeline:scroll(root))与滚动驱动入场(view())——必须包在 @supports + prefers-reduced-motion:no-preference 里,默认全可见; · 圆点随滚动联动(无 JS 版):无 JS 环境里 JS 的滚动监听不存在 ⇒ 每条轨道注册 scroll-timeline(轨道 scroll-timeline-name,.rail/.lane 上 timeline-scope),圆点行内放一个「滑块」.dthumb(内联 --dn/--steps/--end),用 steps() 逐格吸附着走。两条实测坑(必守):① animation-range 在本引擎「报支持但不生效」(计算值恒 normal、所有点同步变化)⇒ 不要用它做逐点区间;② 滚动时间线上必须 animation-duration:auto,写 1ms 会被当成「进度只有 1ms」立刻跑完(停在末态)。无 JS 时所有圆点等宽(间距均匀),高亮交给滑块;有 JS 时滑块隐藏、仍由 JS 精确联动。

  • 反面清单(本环境实测,勿踩):① content-visibility:auto 与「滚动驱动动画 + 吸附」同页时会反复重算尺寸,把 WebView 绕死(Apple 官网在用,我们不用);② text-wrap:pretty 排版回溯代价高,本仓页大量文案,不用(只给标题 balance);③ WebView 偶发卡死(内存压力)≠ 页面有问题——复现失败时先换标签页/重试,再怀疑代码。
  • 共享设计层(v1.9.1):快照(fetch.py 的 render_snapshot())与看板共用 scripts/apple_style.py 的 icon()/heading()/section()/frontmatter(),禁止各写一套图标;heading() 只返回「图标+标题」不含语法前缀。排版规范(禁 emoji、图标写法)→ reference.md §2.0。

[Cheap] Step 5 · 素材摘要(≤15s)

python3 scripts/daily_summary.py     # ≤40 行:target/gate/publish/L0/L1/regime/pattern/brier/paper/portfolio三态/aux/fetch_failures/doc_sync/预测open/批次新鲜度/复盘文件

取代多次 python3 -c "import json…";只读。 预测批次新鲜度:出现 STALE(lag_sessions > 0)→ 必须在复盘 §十 记 [P1],并写明是「锚点未推进」还是「被守卫拦下」(原因见 数据/latest.json 的 predictions.skipped);锚点缺失期间不得事后补建。判读与守卫口径 → reference.md §10.1。

[Std] Step 6 · 复盘写作 用 Step 5 摘要 + 快照写正文 → 必须经唯一入口落盘:python3 scripts/review_write.py {target} 收盘复盘 --src <草稿>,看到 ✔ 导航页可直达。

  • 十段结构、§6.3 A1 骨架与免责句、写作口径(pp vs %、AB/C 三分写、推断/待验证 标注)→ reference.md §2。
  • §六 固定:6.1 模拟盘 → 6.2 纪律自检 → 6.3 A1 并行组合记录(末位)。
  • OPEN_DAY 走盘前简报结构(reference.md §3)。已存在的历史复盘默认不覆盖(退出码 2 = 正常保护)。

[Cheap] Step 7 · 登记与验收(≤30s)

python3 scripts/moc_index.py --verify "复盘/{target} 收盘复盘.md"   # 期望 ✔ 导航页可直达
python3 scripts/arch_check.py    # 第 10 项须 0 个点不到、第 11 项须 可解析

[Cheap] Step 8 · 收尾(≤3min)

python3 scripts/state_digest.py --step 9 --mode DAILY_REVIEW --cost <usd>
python3 scripts/tests_gate.py    # 内容寻址门控:代码未变→只跑快类;变了→整类跑(禁止逐项)
  • 测试项数以 grep -c "def test" tests/test_pipeline.py 现场为准(不写死数字)。门控红线见 reference.md §13。
  • 阶段计时登记:把本次各阶段秒数(预检/收集/管线/自检/A1/摘要/写作/登记/测试)追加进 state/daily_timing.json(形如 {"runs":[{"date":…,"mode":…,"stages":{…},"total_s":…}]}),用于"慢在哪"的可度量回归;只写 state/,不参与判据。

幂等快路径(≤60s 直接返回)

python3 scripts/daily_summary.py --fast-check   # {"fast_path":true,...}(内含一次只读 selfcheck)

若 数据/latest.json.generated_at 为今日 且 当日 target 的收盘复盘已存在 且 selfcheck 全绿 → fast_path=true → 直接输出 STATUS 摘要(target/gate/publish/L0/L1/复盘路径/三件套),不重跑管线与测试。逃生:--force(或用户明确要求重跑)。

总原则(不可协商)

  1. 直接执行,不只解释;低风险读写算不必先询问。 2. 只用仓库真实文件/原始数据/可复核脚本,禁用搜索引擎行情替代库内数据。
  2. 不补数、不前值填充、不线性外推、不平滑、不把收益率当债券价格。 4. 框架/数据口径定义.md 是唯一口径;冲突必须报告,不静默覆盖。
  3. 生成结论前先跑管线与 G1;G1 失败只能生成「数据缺失占位」。 6. 事实带来源/路径;推断标 [推断],参数标 [待验证],无法复核标 [未能复核]。
  4. 不给用户账户直接的买卖指令;只写规则/状态/风险动作/待验证方案。 8. 不覆盖已有历史收盘复盘(仅用户明确要求时,且先读原文件)。

G1 失败处理(含 Step 0 预检跳过)

gate != PASS / 核心源失败 / 核心值过期 / Step 0 core_ok=false 时:

  1. 不生成正常收盘复盘;2. 建 复盘/YYYY-MM-DD 数据缺失占位.md(已存在不覆盖);
  2. 正文可见写:数据可信度:missing/unverified;本日禁止数值结论;禁止外推和前值填充;
  3. 只记失败源/运行时间/日志路径/下次重试条件;占位不得写金/DXY/VIX/10Y/TIPS/SPX/NDX 的今日值、涨跌、L0/L1 数值或 A/B/C 方向;5. MOC 只显示降级状态;6. 最终回复明确 G1 FAIL 与非零码。

红线总表(一个都不许删)

  • 熔断(max_loops/max_budget/max_no_progress);state/current.md 唯一写入权;G1 闸门语义;review_write.py 唯一写入入口;doc_sync 13 项;arch_check 11 项;A1 免责句(只验流程纪律、非收益证据、不得据此换核心底仓、A2 里程碑 = 经一次组合 ≥15% 回撤且没动手);绩效数字引用口径;外部资源红线(量化策略/ 只读,pysystemtrade 禁装)。
  • 具体条文与依据 → reference.md §6/§7/§9。
  • 跨对话与定时边界:提示词/Skill 不能让 iOS 挂起时自行唤醒;cron/at/nohup 不可靠;需要定时须用 Apple 快捷指令。绝不声称"已后台定时运行",除非本环境实际收到触发并完成运行。